#ifndef DATABASEPOOL_H
#define DATABASEPOOL_H

#include <QObject>
#include <QSqlDatabase>
#include <QQueue>
#include <QMutex>
#include <QWaitCondition>

// 数据库连接池类，负责管理数据库连接
class DatabasePool : public QObject {
    Q_OBJECT
public:
    // 获取单例实例
    static DatabasePool& instance();
    // 获取数据库连接
    QSqlDatabase getConnection();
    // 释放数据库连接
    void releaseConnection(QSqlDatabase conn);

private:
    // 构造函数，私有化以实现单例模式
    explicit DatabasePool(QObject* parent = nullptr);
    // 析构函数
    ~DatabasePool();

    // 存储可用数据库连接的队列
    QQueue<QSqlDatabase> m_connections;
    // 互斥锁，用于线程安全
    QMutex m_mutex;
    // 连接计数器
    static int connectionCounter;
    // 等待条件，用于连接池满时等待
    QWaitCondition m_connectionAvailable;
    // 最大连接数量
    static const int MAX_CONNECTIONS;
};

#endif // DATABASEPOOL_H
